package com.gper.edu.mytrait

/**
 * 特质中声明了字段，混入类就直接具有了该字段，而不是继承
 * 特质中的字段有二种情况:
 *  1. 声明的时候赋值了，就是具体字段
 *  2. 声明的时候没有赋值，就是抽象字段
 */
object TraitMixInFieldDemo {

  def main(args: Array[String]): Unit = {
    /**
     * 混入特质的时候，如果特质中有抽象字段或抽象方法时，需要实现
     */
    val traitField = new TraitMixInField with TraitField {
      //用override 实现抽象字段  _表示给其赋默认值
      override var operatorValue: Double = _
      //用override 实现抽象insert方法
      override def insert(value: Int): Unit = {
        println("insert value :"+value)
      }
    }

    traitField.insert(90)
    traitField.sayHi()
  }
}

trait TraitField{
  //特质中的具体字段
  var operatorType :String = "insert"
  //特质中的抽象字段
  var operatorValue :Double

  def sayHi(): Unit ={
    println("hello world \n operatorType="+operatorType+"\n operatorValue="+operatorValue)
  }

  def insert(value:Int)
}

class TraitMixInField{

}